package com.hmall.item.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmall.common.dto.PageDTO;
import com.hmall.item.mapper.ItemMapper;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.IItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

@Service
@Slf4j
public class ItemService extends ServiceImpl<ItemMapper, Item> implements IItemService {
    /**
     *    分页
     * @param page
     * @param size
     * @return
     */
    @Override
    public PageDTO pageData(Integer page, Integer size) {
        // 分页构造器
        Page<Item> pageInfo = new Page<>(page, size);
        // 条件构造器
        LambdaQueryWrapper<Item> queryWrapper = new LambdaQueryWrapper<>();
        // 添加排序条件,根据更新时间倒序排列
        queryWrapper.orderByDesc(Item::getUpdateTime);

        // 分页查询
        Page<Item> page1 = this.page(pageInfo, queryWrapper);
        List<Item> records = page1.getRecords();
        long total = page1.getTotal();

        PageDTO<Item> itemPageDTO = new PageDTO<>();
        itemPageDTO.setList(records);
        itemPageDTO.setTotal(total);

        return itemPageDTO;

    }

    /**
     *  根据id 进行查询商品信息
     * @param id
     * @return
     */
    @Override
    public Item item(Long id) {

        log.info("输入的id{}",id);

        Item byId = this.getById(id);

        return byId;
    }

    /**
     *   商品的新增分类
     * @param item
     */
    @Override
    public void addItem(Item item) {
        log.info("item:{}============================================================="+item);
        this.save(item);

        // 创建一个时间戳对象
        Date date = new Date();
        // 类型不同,转换时间类型
        Timestamp timestamp = new Timestamp(date.getTime());
        // 更新时间
        item.setCreateTime(timestamp);
        item.setUpdateTime(timestamp);
        this.save(item);
    }

    /**
     *  根据 id 进行上架下架
     * @param id
     * @param status
     */
    @Override
    public void itemStatus(Long id, Integer status) {
        // 根据id获取到商品对象
        Item byId = this.getById(id);
        // 在设置一个相反的
        byId.setStatus(status);
        this.updateById(byId);
    }

    /**
     *  更新操作
     * @param item
     */
    @Override
    public void itemUpdata(Item item) {
        this.updateById(item);

        // 创建一个时间戳对象
        Date date = new Date();
        // 类型不同,转换时间类型
        Timestamp timestamp = new Timestamp(date.getTime());
        // 更新时间
        item.setCreateTime(timestamp);
        item.setUpdateTime(timestamp);
        this.save(item);
    }

    /**
     *  根据id删除
     * @param id
     */
    @Override
    public void itemDelete(Long id) {
        this.removeById(id);
    }
}
